阅读更多

1顶
0踩

编程语言
6月11日(美国时间),Spark 1.4版本正式发布,在Spark Core、Spark Streaming、Spark SQL(DataFrame)、Spark ML/MLlib等升级之外,新版本更加入了数据科学家们望眼欲穿的SparkR组件。长话短说,下面一起看Databricks Blog上关于SparkR的介绍,以及七牛技术总监陈超在ChinaScala微信号上对组件升级的总结。

项目历史

SparkR源于AMPLab,是将R易用性和Spark扩展性整合的一个探索。在这个前提之下,SparkR开发者预览版最早在2014年1月开源。随后的一年,SparkR在AMPLab得到了飞速发展,而在许多贡献者的努力下,SparkR在性能和可用性上得到了显著提升。最近,SparkR被合并到Spark项目,并在1.4版本中作为alpha组件发布。

SparkR DataFrames

在Spark 1.4中,SparkR 的核心组件是SparkR DataFrames——在Spark上实现的一个分布式data frame。data frame 是R中处理数据的基本数据结构,而当下这个概念已经通过函数库(比如Pandas)扩展到其它所有语言。而像dplyr这样的项目更去除了基于data frames数据操作任务中存在的大量复杂性。在SparkR DataFrames中,一个类似dplyr和原生R data frame的API被发布,同时它还可以依托Spark,对大型数据集进行分布式计算。

下面例子将展示SparkR DataFrames API的一些特性。(你可以在这里看到完整示例)



更全面的 DataFrames介绍参见SparkR编程指南

SparkR整合的好处

在更易用的API之外,SparkR从Spark的紧密整合中继承了诸多好处。这些包括:
  • Data Sources API:通过Spark SQL的数据源API,API SparkR可以从包括Hive tables、JSON files、Parquet files等各种来源中读取数据。
  • Data Frame优化:SparkR DataFrames还继承了计算引擎中的大量优化,比如代码生成和内存管理。例如,下面图表是单机R、Python和Scala在1000万整数对上的group-by聚合操作运行时性能对比(使用了相同的数据集,参考这里)。如图所示,在计算引擎中优化可以使SparkR的性能表现类似于Scala和Python。




  • 可便捷地扩展到多核和多主机:在SparkR DataFrames 上执行的操作会被自动分配到Spark群集中所有可用的内核和机器上。因此,在配备了数千主机后,SparkR DataFrames 可以被用于TB数据的处理。

在未来的版本中,许多功能已经被计划添加到SparkR:其中包括高级别的机器学习算法支持,并将SparkR DataFrames 打造成Spark密不可分的组件。
Spark Core

现在大家最关心什么?无疑就是性能和运维!什么最影响性能?shuffle首当其冲!什么又是运维第一要务?必须是监控呀(就先不扯alert了)!1.4在这两点都做足了功夫。 1.4中,Spark为应用提供了REST API来获取各种信息(jobs / stages / tasks / storage info),使用这个API搭建个自己的监控简直是分分钟的事情,不止于此,DAG现在也能可视化了,不清楚Spark的DAGScheduler怎么运作的同学,现在也能非常轻易地知道DAG细节了。再来说说shuffle,大家都知道,从1.2开始sort-based shuffle已经成为默认的shuffe策略了,基于sort的shuffle不需要同时打开很多文件,并且也能减少中间文件的生成,但是带来的问题是在JVM的heap中留了大量的java对象,1.4开始,shuffle的map阶段的输出会被序列化,这会带来两个好处:1、spill到磁盘上的文件变小了  2、GC效率大增,有人又会说,序列化反序列化会产生额外的cpu开销啊,事实上,shuffle过程往往都是IO密集型的操作,带来的这点cpu开销,是可以接受。

大家期待的钨丝计划(Project Tungsten)也在1.4初露锋芒,引入了新的shuffle manager “UnsafeShuffleManager”,用以提供缓存友好的排序算法,及其它一些改进,目的是降低shuffle过程中的内存使用量,并且加速排序过程。钨丝计划必定会成为接下来两个版本(1.5,1.6)重点关注的地方。

Spark Streaming

Streaming在这个版本中增加了新的UI,简直是Streaming用户的福音,各种详细信息尽收眼底。话说Spark中国峰会上,TD当时坐我旁边review这部分的code,悄悄对说我”this is awesome”。对了,这部分主要是由朱诗雄做的,虽然诗雄在峰会上放了我鸽子,但必须感谢他给我们带来了这么好的特性!另外此版本也支持了0.8.2.x的Kafka版本。

Spark SQL(DataFrame)

支持老牌的ORCFile了,虽然比Parquet年轻,但是人家bug少啊 : ) 1.4提供了类似于Hive中的window function,还是比较实用的。本次对于join的优化还是比较给力的,特别是针对那种比较大的join,大家可以体会下。JDBC Server的用户肯定非常开心了,因为终于有UI可以看了呀。

Spark ML/MLlib

ML pipelines从alpha毕业了,大家对于ML pipelines的热情还真的蛮高的啊。我对Personalized PageRank with GraphX倒是蛮感兴趣的,与之相关的是recommendAll in matrix factorization model。事实上大多数公司还是会在Spark上实现自己的算法。
  • 大小: 158.2 KB
  • 大小: 17.8 KB
1
0
评论 共 1 条 请登录后发表评论
1 楼 somefuture 2015-06-15 18:03
完全没看懂

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 通过可视化来了解你的Spark应用程序

    【编者按】在"Spark1.4:SparkR发布,钨丝计划锋芒初露"一文中,我们有简单地介绍了1.4版本给Spark注入的新特性,在各个组件的介绍中也提到了新UI给用户带来的便捷。而从本文开始,我们将通过DatabricksBlog上的系列...

  • Java并发编程之Semaphore信号量源码分析

    JUC 中 Semaphore 的使用与原理分析,Semaphore 也是 Java 中的一个同步器,与 CountDownLatch 和 CycleBarrier 不同在于它内部的计数器是递增的,那么,Semaphore 的内部实现是怎样的呢?Semaphore 信号量也是Java 中一个同步容器,与CountDownLatch 和 CyclicBarrier 不同之处在于它内部的计数器是递增的...

  • Java中的信号量机制

    在多线程并发编程中,经常需要进行线程同步和互斥,以确保共享资源的正确访问和操作。Java中提供了信号量机制,通过计数器来控制线程的并发访问,保证对共享资源的访问是同步的。本文将介绍信号量机制的概述以及Java中常用的几个信号量类的原理。包括Semaphore类、CountDownLatch类、CyclicBarrier类、Exchanger类。最后提供一个使用信号量机制的场景,并简单分析其实现。信号量机制是一种计数器,用于线程同步和互斥,控制并发访问共享资源。

  • java 信号量 管道_Java 信号量 Semaphore 介绍

    简介信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对...

  • java 命名管道_Java 中的进程与线程

    在 Java 语言中,对进程和线程的封装,分别提供了 Process 和 Thread 相关的一些类。Java 进程的建立方法ProcessBuilder.start 方法来建立一个本地的进程如果希望在新创建的进程中使用当前的目录和环境变量,则不需要任何配置,直接将命令行和参数传入 ProcessBuilder 中,然后调用 start 方法,就可以获得进程的引用。Process 也可以先配置环境...

  • 信号量能被 FixedThreadPool 替代吗?

    Semaphore 信号量 从图中可以看出,信号量的一个最主要的作用就是,来控制那些需要限制并发访问量的资源。具体来讲,信号量会维护“许可证”的计数,而线程去访问共享资源前,必须先拿到许可证。线程可以从信号量中去“获取”一个许可证,一旦线程获取之后,信号量持有的许可证就转移过去了,所以信号量手中剩余的许可证要减一 同理,线程也可以“释放”一个许可证,如果线程释放了许可证,这个许可证相当于被归还给信号量了,于是信号量中的许可证的可用数量加一。当信号量拥有的许可证数量减到 0 时,如果下个线程还想要获得

  • java 信号量Semaphore的使用

    java 信号量Semaphore的使用 信号量是一种计数器,用来保护一个或者多个共享资源的访问。 信号量的使用: (1)如果一个线程要访问一个共享资源,他必须先获得信号量。如果信号量的内部计数器大于0,信号量将减1,然后允许访问这个共享资源。计数器大于0意味着又可以使用的资源,因此线程讲被允许使用其中一个资源。 (2)如果信号量等于0,信号将将会把线程植入休眠直到计数器大于0.计数器等于

  • 三大经典同步问题——Java代码实现(信号量模拟)

    三大经典同步问题——Java代码实现(信号量模拟) 一、代码结构说明 1、common包①JavaSynchronizationTest.java 简单介绍了信号量机制在Java里面的实现:结合synchronized关键字和对象锁机制 /** * PV测试:PV代码直接写的话是无法保证原子性操作的 *  * 还有Integer好像不是线程安全的 *  * 代码功能2个进程(线程)把buffer累...

  • Java中的信号量Semaphore

    1、信号量概念 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程,需要创建一个信号量VI,然后将Acquire Semaphore V

  • Spark 1.4新特性概述

    经过4个RC版本,Spark 1.4最终还是赶在Spark Summit前发布了,本文简单谈下本版本中那些非常重要的新feature和improvement. 正式引入SparkR  Spark 1.4正式引入了SparkR(可以参见本博客的...

  • Spark 1.4 新特性概述

    大家期待的钨丝计划(Project Tungsten)也在1.4初露锋芒,引入了新的shuffle manager “UnsafeShuffleManager”, 来提供缓存友好的排序算法,及其它一些改进,目的是降低shuffle过程中的内存使用量,并且加速排序...

  • 新的可视化帮助更好地了解Spark Streaming应用程序

    日前,在Spark1.4.0中新推出了可视化功能,用以更好的了解Spark应用程序的行为。Spark贡献者Tathagata Das、Shixiong Zhu和Andrew Or又撰文重点介绍为理解Spark Streaming应用程序而引入的新可视化功能。

  • java线程信号量_Java线程间通信与信号量

    1. 信号量Semaphore先说说Semaphore,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。一般用于控制并发线程数,及线程间互斥。另外重入锁 ReentrantLock 也可以实现该功能,但实现上要复杂些。功能就类似厕所有5个坑,假如有10个人要上厕所,那么同时只能有多少个人去上厕所呢?...

  • java 信号量 管道_C实现进程间通信(管道; 共享内存,信号量)

    最近学习了操作系统的并发;以下是关于进程间实现并发,通信的两个方法。例子:求100000个浮点数的和。要求:(1)随机生成100000个浮点数(父进程)。(2)然后创建4个后代进程,分别求25000个浮点数的和。(3)父进程对4个后代进程的结果求和。(4)每个子进程在屏幕上以格式“(ID_k) Child_k sum: XXX”打印信息,其中k的取值为1~4,代表子进程的编号,ID_k表示第k个子...

  • Java并发教程–信号量

    这是我们将要进行的Java并发系列的第一部分。 具体来说,我们将深入探讨Java 1.5及更高版本中内置的并发工具。 我们假设您对同步和易失性关键字有基本的了解。 第一篇文章将介绍信号量-特别是对信号量进行计数 。 信号量是用于限制对资源访问的经常被误解和使用不足的工具。 对于其他控制对资源的访问的方式,它们将被忽略。 但是信号量为我们提供了一个超越常规同步和其他工具所能提供的工具集的工具...

  • java 并发 信号量_Java并发编程 - 信号量(Semaphore)

    同步工具类可以是任何一个对象,只要它根据其自身的状态来协调线程的控制流。阻塞队列可以作为同步工具类,其他类型的同步工具类还包括 信号量(Semaphore)、栅栏(CyclicBarrier)以及闭锁(Latch)。本文重点介绍Semaphore的使用以及应用场景。信号量(Semaphore)计数信号量(Counting Semaphore)用来控制同时访问某个特定资源的操作数量,或者同时执行某个...

  • 一篇文章看懂spark 1.3+各版本特性

    Spark 1.6.x的新特性Spark-1.6是Spark-2.0之前的最后一个版本。主要是三个大方面的改进:性能提升,新的 Dataset API 和数据科学功能的扩展。这是社区开发非常重要的一个里程碑。1. 性能提升根据 Apache Spark 官方 ...

  • java Semaphore信号量的原理和示例

    Semaphore简介Semaphore是一个计数信号量,它的本质是一个”共享锁”。信号量维护了一个信号量许可集。线程可以通过调用acquire()来获取信号量的许可;当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止。 线程可以通过release()来释放它所持有的信号量许可。Semaphore的函数列表// 创建具有给定的许可数和非公平的公平设置的 Semapho

Global site tag (gtag.js) - Google Analytics